package cn.tianjindong.blog_portal.service;

import cn.tianjindong.blog.pojo.BlogUser;

public interface UserService {
	/**
	 * 根据用户名或邮箱查询用户
	 * @param username 用户名或邮箱
	 * @return
	 */
	BlogUser selectByUsernameOrEmail(String username);
	
	/**
	 * 检测用户名是否已经存在
	 * @param username
	 * @return true表示已经存在，false表示不存在
	 */
	boolean checkUsername(String username);

	/**
	 * 检测邮箱是否已经存在
	 * @param email
	 * @return true表示已经存在，false表示不存在
	 */
	boolean checkEmail(String email);
	
	/**
	 * 创建该账户
	 * @param user
	 */
	void createAccount(BlogUser user);

	/**
	 * 更新用户信息
	 * @param user
	 */
	void updateUserInfo(BlogUser user);

	/**
	 * 通过用户ID获取User对象
	 * @param id
	 * @return
	 */
	BlogUser getUserById(Long id);
	
	/**
	 * 收藏文章
	 * @param userId
	 * @param articleId
	 */
	void collectArticle(Long userId,Long articleId);

	/**
	 * 取消收藏
	 * @param id
	 * @param articleId
	 */
	void unCollectArticle(Long id, Long articleId);

	/**
	 * 检查当前用户是否已经收藏指定文章
	 * @param userId
	 * @param articleId
	 * @return true表示已经收藏
	 */
	boolean checkArticleIsCollection(Long userId, Long articleId);
	
	/**
	 * 只有在进行此操作之前，激活状态为0的账户才进行激活操作
	 * @param userId
	 * @param activationCode
	 * @return 返回激活操作前，账户的激活状态(0表示未激活，1表示已激活，-1表示废除),
	 * 如果userId在数据库中没有,返回-2;如果激活码错误,返回-3.
	 */
	int activateAccount(Long userId,String activationCode);
	
	/**
	 * 添加用户的登录记录
	 * @param userId
	 * @param ip
	 */
	void addVisitLog(Long userId,String ip);
}
